0

タイトルはナンセンスに聞こえますが、以下の例が役に立てば幸いです。

文字列のリストと整数のリストを指定すると、そのリスト内のすべての文字のリストを 1 つにまとめることができる大きな LINQ ステートメントを作成しようとしています。例:

インデックス:

{2,4}

可能:

{"hello","world"}

私に与えるべきです:

{'l','o','r','d'}

各文字列のインデックス 2 と 4 から。

私は少しずれていると思いますが、これは私が何かを元に戻す/修正するために取り組んでいた厄介な声明です:

var lettersToCheckOut = possible.Select(s => s.ToCharArray()).Select((c, index) => new
                        {
                            let = c,
                            ind = index
                        }).Where(c => indices.Contains(c.ind)).Select(c => c.let);
4

2 に答える 2

3

そんな感じ?

var chars = indices.SelectMany(i => words.Where(w => i < w.Length)
                                         .Select(w => w[i])).ToList();
Console.WriteLine(string.Join(",", chars)); // lrod

ロジックは次のとおりです。

  • インデックスごとに、考えられるすべての単語を調べて、文字を集めたいと思います。

  • まず、インデックスが現在の単語の範囲内にあることを確認する必要があります。

  • 各単語から、現在のインデックスとしてインデックス付けされた文字を取得します。

  • メソッドを使用してSelectMany、コレクションではなく文字のコレクションを取得しIEnumerable<char>ます。

indicesとを入れ替えwordsて、異なる順序で文字を取得できます。

var chars = words.SelectMany(w => indices.Where(i => i < w.Length)
                                         .Select(i => w[i])).ToList();
Console.WriteLine(string.Join(",", chars)); // lord
于 2013-05-09T01:12:13.250 に答える
0

質問には既に回答があることは知っていますが、Linq のクエリ理解構文を使用した代替ソリューションを次に示します。私は個人的にはよりエレガントだと思っており、他の人もそうする場合に備えて共有しています。

        var words = new[] { "Hello", "World" };
        var indexes = new[] { 2, 4 };

        //{ 'l', 'o', 'r', 'd' }
        var output = 
            from word in words
            from index in indexes
            where word.Length > index
            select word[index];
于 2013-05-09T01:52:57.077 に答える