0

5つのフィールドを持つクラスがあります。

public class Test
{
public string name;
public string description;
public int int1;
public int int2;
public int int3;
}

私の関数の1つに、List<Test> list10個のアイテムがあります。ここではSortedList<string,string>、2つのプロパティの名前と説明が必要です。

私は知っています、私はこれを使用してこれを達成することができますが、私はfor each知りたいですLINQを使用してこれを行うにはどうすればよいですか?

4

3 に答える 3

4

これを使って:

var result = list.OrderBy(x => x.Name).ThenBy(x => x.Description);

重要:

  1. OrderBy互いに上書きするため、複数の呼び出しを使用しないでください。
  2. ソート結果は になりますresult。オリジナルlistは変わらず。
于 2012-09-10T13:15:46.163 に答える
2

@HugoRuneからの回答は非常に網羅的ですが、Linqを使用すると言ったので、目標を達成するためにスコープに拡張メソッドを追加することをお勧めします。

static class SortedListExtensions
{
    public static SortedList<K, V> ToSortedList<K, V, T>(
        this IEnumerable<T> source, 
        Func<T, K> keySelector, Func<T, V> valueSelector)
    {
        return new SortedList<K,V>(
            source.ToDictionary(
                cur => keySelector(cur), 
                cur => valueSelector(cur)));
    }
}

このようにして、SortedListの作成をLinq計算で構成できます。

var sl = list.ToSortedList(f => f.name, f => f.description);
于 2012-09-10T14:20:05.500 に答える
1

AC# SortedList は辞書の一種であり、実際にはリストではありません。名前をキーとして、説明を値として含む SortedList が本当に必要な場合は、これを使用できます。

SortedList slist = new SortedList(list.ToDictionary(t=>t.name, t=>t.description))

ディクショナリ キーは一意である必要があるため、名前が 2 回出現すると例外がスローされることに注意してください。

ただし、ほとんどの実用的な目的では、SortedList をパラメータとして特に必要とするライブラリ関数がない限り、Daniel Hilgarth によって投稿されたソリューションを使用します。

于 2012-09-10T14:12:18.317 に答える