前提・実現したいこと
Atcoderの問題でわからないところを理解したい。
Ⅰ
以下のコードを書いたときに、エラーとなる理由を知りたい。
②、③のコードではなぜいけるのか知りたい。
Ⅱ
④のコードのときエラーとなる理由を知りたい。
Enumerable.Minメソッドは、Minメソッドをかける配列の内容の型がIComparableを実装しなければならない。
というのはわかる。
a,匿名型にはIComparableを実装できない?
b,タプル型のIComparableのCompareToメソッドの実装はどこで見れますか?(どういうルールで比較するの知りたい)
(↓↓↓追加情報↓↓↓)
問題文は以下のリンクにあります
問題リンクB - Palace
コンソールへの入力例1
2
12 5
1000 2000
コンソールへの入力例2
3
21 -11
81234 94124 52141
ご回答、ご教授宜しくお願いいたします。。。。!!!
発生している問題・エラーメッセージ
①エラーメッセージ CS1061:'(double,int)'に'index'の定義が含まれておらず、型'(double,int)'の最初の引数を受け付けるアクセス可能な拡張メソッド'index'が見つかりませんでした。 ④エラーメッセージ ハンドルされていない例外: System.ArgumentException: 少なくとも 1 つのオブジェクトで IComparable を実装しなければなりません。
該当のソースコード
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using System.Threading.Tasks; 6 7namespace AtCoder 8{ 9 class B_Palace 10 { 11 static void Main( string[] args ) 12 { 13 int n = int.Parse(Console.ReadLine()); 14 15 int[] inputs = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); 16 int t = inputs[0]; 17 float a = (float) inputs[1]; 18 19 int[] elevations = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); 20 21 //ダメ① index+1 22 //var res = elevations.Select(x => t - x * 0.006).Select(( double num, int index ) => (Math.Abs(num - a), index+1)).Min(x => x).index; 23 24 //OK② indexそのまま 25 var res = elevations.Select(x => t - x * 0.006).Select(( double num, int index ) => (Math.Abs(num - a), index)).Min(x => x).index; 26 27 //OK③ Item2を使う。 28 //var res = elevations.Select(x => t - x * 0.006).Select(( double num, int index ) => (Math.Abs(num - a), index = index + 1)).Min(x => x).Item2; 29 //var res = elevations.Select(x => t - x * 0.006).ToArray().Select(( s, index ) => new Tuple<double, int>(Math.Abs(s - a), index + 1)).Min(d => d).Item2; 30 31 //ダメ④ 匿名型 32 //var res = elevations.Select(x => t - x * 0.006).Select(( double num, int index ) =>new { Diff = Math.Abs(num - a), Index = index }).Min(x => x).Index; 33 34 Console.WriteLine(res + 1); 35 } 36 } 37} 38
試したこと
・タプルについて理解する。
・index付きSelectメソッドについて理解する。
・匿名型について理解する。
補足情報(FW/ツールのバージョンなど)
Microsoft Visual Studio Community 2019
Version 16.9.4
回答1件
あなたの回答
tips
プレビュー