0

私は持っています

List<string> strs;
double[] values;

ここで、配列にはリストvalues内の各文字列の値が含まれていますstrs

Say strs={"abc","def","ghi"}
and values={3,1,2}

これは、「abc」の値が3などであることを意味します。

で並べ替えstrsて並べ替えたいvaluesvalues

strs={"def","ghi","abc"}
values={1,2,3}

これを達成する簡単な方法はありますか?

4

6 に答える 6

2

を使用Enumerable.Zipして、結果を並べ替えてから、文字列のリストを抽出できます。

何かのようなもの:

var result = strs.Zip(values, (first, second) => new Tuple<string, double>(first, second))
            .OrderBy(x => x.Item2)
            .Select(x => x.Item1)
            .ToList();
于 2012-10-09T12:52:10.643 に答える
2
var sortedStrs = strs.Select((i, s) => new {Value = values[i], Str = s})
                     .OrderBy(x => x.Value)
                     .Select(x => x.Str).ToList();

これらの値を次のようなクラスのプロパティとして論理的に配置できる場合:

class NameAndOrder
{
    public string Name;
    public int Order;
}

そうすれば、より良く、より組織化され、次のことができるようになります。

var items = new List<NameAndOrder>(strs.Count);

for (var i = 0; i < strs.Count; i++)
{
    items.Add(new NameAndOrder { Name = strs[i], Order = values[i] });
}

items.Sort((a, b) => a.Order.CompareTo(b.Order));
于 2012-10-09T12:53:07.877 に答える
2

これらのコレクションをどのように設定していますか?または、これら2つのパラメーターが与えられていますか?

StringAndOrderクラスを作成してLINQを使用できます。

public class StringAndOrder
{
    public string String { get; set; }
    public double Order { get; set; }
}

List<StringAndOrder> list; //create with this structure instead
var orderedStrings = list.OrderBy(item => item.Order).Select(item => item.String);
于 2012-10-09T12:53:30.207 に答える
2

このArray.Sortメソッドには、2つの配列を受け取り、最初の配列の値に従って両方の配列を並べ替えるオーバーロードがあるため、リストから配列を作成します。

string[] strsArr = strs.ToArray();

次に、それらを並べ替えるのは簡単ではありません。

Array.Sort(values, strsArr);

そして、それが必要な場合は、リストに戻ります。

strs = strsArr.ToList();
于 2012-10-09T12:56:34.407 に答える
1

辞書オブジェクトを使ってみませんか。

Dictionary<string, int> dictionary =
    new Dictionary<string, int>();
dictionary.Add("cat", 2);
dictionary.Add("dog", 1);
dictionary.Add("llama", 0);
dictionary.Add("iguana", -1);
// Acquire keys and sort them.
var list = dictionary.Keys.ToList();
list.Sort();
于 2012-10-09T12:54:52.453 に答える
1
var strs = new[] { "abc", "def", "ghi" };
var values = new[] { 3, 1, 2 };

var newArr = strs.Select((s, i) => new { s, i })
                 .OrderBy(x => values[x.i])
                 .Select(x => x.s)
                 .ToArray();
于 2012-10-09T12:55:10.677 に答える