![](/img/trans.png)
[英]Convert array of objects with string property to an array of strings in c#
[英]Map array of strings to property in a List of objects C#
我有對象List<MyModel> myList
MyModel.cs
public int Id {get; set;}
public int SourceTitle {get; set;}
public int Detail {get; set;}
public string Color {get; set:}
我有一個顏色的字符串數組,即。 string[] colorPallete[] = {color1, color2, color3, coloe4 ..... color10}
現在,我的清單中大約有35個項目。 可以有多個具有相同SourceTitle和ID的項目。 我想為具有相同SourceTitle的項分配顏色。 最終,當我的標題數超過10時,應該再次為Color11分配第11個標題。
現在,我使用Id進行如下操作:
myList.ForEach{x => x.Color = colorPallete.ElementAtOrDefault((x.Id -1) % colorPallete.Length));
這可以正常工作,但是如果兩個不同ID的其余部分相同,則將為它們分配相同的顏色,這不是我想要的顏色。
有沒有一種方法可以根據標題而不是ID分配顏色?
foreach (var group in list.GroupBy(x => x.SourceTitle))
{
for (int i = 0; i < group.Count(); i++)
{
group.ElementAt(i).Color = palette[i % 10];
}
}
這是您想要的:
SortedList<int, int> colorHistory = new SortedList<int, int>();
int k = -1;
for (int i = 0; i < myList.Count; i++)
{
if (!colorHistory.ContainsKey(myList[i].SourceTitle))
{
colorHistory[myList[i].SourceTitle] = ++k % colorPallete.Length;
}
myList[i].Color = colorPallete[colorHistory[myList[i].SourceTitle]];
}
輸出:
ID Source Color
--------------------------
0 5 color1
1 19 color2
2 8 color3
3 15 color4
4 12 color5
5 15 color4
6 3 color6
7 16 color7
8 3 color6
9 17 color8
10 18 color9
11 8 color3
12 4 color10
13 13 color1
14 4 color10
15 18 color9
16 4 color10
17 3 color6
18 14 color2
19 1 color3
20 3 color6
21 4 color10
22 6 color4
23 17 color8
24 13 color1
25 17 color8
26 8 color3
27 6 color4
28 18 color9
29 13 color1
30 2 color5
31 11 color6
32 18 color9
33 19 color2
34 19 color2
35 10 color7
36 13 color1
37 5 color1
38 11 color6
39 2 color5
40 2 color5
41 10 color7
42 12 color5
43 2 color5
44 13 color1
45 12 color5
46 2 color5
47 18 color9
48 14 color2
49 6 color4
50 8 color3
51 11 color6
52 14 color2
53 3 color6
54 7 color8
55 1 color3
56 14 color2
57 10 color7
58 3 color6
59 15 color4
60 7 color8
61 16 color7
62 17 color8
63 10 color7
64 15 color4
65 7 color8
66 10 color7
67 4 color10
68 14 color2
69 13 color1
70 5 color1
71 18 color9
72 12 color5
73 12 color5
74 19 color2
75 12 color5
76 12 color5
77 4 color10
78 5 color1
79 1 color3
80 16 color7
81 10 color7
82 12 color5
83 13 color1
84 5 color1
85 11 color6
86 17 color8
87 16 color7
88 13 color1
89 19 color2
90 15 color4
91 3 color6
92 3 color6
93 15 color4
94 15 color4
95 5 color1
96 13 color1
97 3 color6
98 7 color8
99 6 color4
這是您需要的:
foreach (var x in myList.GroupBy(m => m.SourceTitle).Select((gms, i) => new { gms, i }))
{
foreach (var m in x.gms)
{
m.Color = colorPallete[x.i % colorPallete.Length];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.