我有一個二維串列:
{{"Porsche", "Blue"}, {"Ferrari", "Red"}, {"Honda", "Green"}, {"Lambo", "Black"}}
我想根據第一個子元素的自定義順序重新排序串列。所以我提供了一個可能如下所示的串列:
{"Ferrari", "Honda", "Porsche", "Lambo"} /*or perhaps even:*/ {2,3,1,4}
它將按照我給出的新順序回傳重新排序的原始串列,顏色保持不變:
{{"Ferrari", "Red"}, {"Honda", "Green"}, {"Porsche", "Blue"}, {"Lambo", "Black"}}
這在 C# 中可能嗎?
uj5u.com熱心網友回復:
也許您可以使用以下概念:
概念:
- 將二維陣列投射到
Dictionary<string, List<string>>. - 通過 key與結果 1連接并回傳結果(結果:嵌套串列/多維陣列)。
using System.Linq;
var lookup = inputs.Select((value, index) => new { brand = value[0], array = value })
.ToLookup(x => x.brand, x => x.array);
var order = new List<string>{"Ferrari", "Honda", "Porsche", "Lambo"};
var orderList = (from o in order
join l in lookup on o equals l.Key
select l
).ToArray();
示例程式
輸出
[["Ferrari","Red"],["Honda","Green"],["Porsche","Blue"],["Lambo","Black"]]
邊注:
如果二維陣列資料包含多個相同品牌的記錄,則需要.SelectMany()在加入訂單陣列/串列和二維陣列后展平結果。
string[][] inputs = new string[][]
{
new string[] {"Porsche", "Blue"},
new string[] {"Ferrari", "Red"},
new string[] {"Honda", "Green"},
new string[] {"Lambo", "Black"},
new string[] {"Ferrari", "Yellow"},
};
var lookup = inputs.Select((value, index) => new { brand = value[0], array = value })
.ToLookup(x => x.brand, x => x.array);
var order = new List<string>{"Ferrari", "Honda", "Porsche", "Lambo"};
var orderList = (from o in order
join l in lookup on o equals l.Key
select l
)
.SelectMany(x => x)
.ToArray();
示例程式(相同品牌的扁平陣列)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/425650.html
