C# DataTable -> 需要根据列值生成一个ID
Posted
技术标签:
【中文标题】C# DataTable -> 需要根据列值生成一个ID【英文标题】:C# DataTable -> Need to generate an ID based on the column values 【发布时间】:2021-08-19 10:03:07 【问题描述】:Value | ID |
---|---|
A | |
A | |
A | |
B | |
B | |
C |
期望的输出
Value | ID |
---|---|
A | 1 |
A | 1 |
A | 1 |
B | 2 |
B | 2 |
C | 3 |
我需要根据对值列进行分组来创建 ID。所有 A 和 B 的单个 ID。
提前致谢!
【问题讨论】:
【参考方案1】:您可以简单地使用如下循环:
for(int i = 0; i < dataTable.Rows.Count; i++)
switch(dataTable.Rows[i][0].ToString())
case "A" :
dataTable.Rows[i][1] = 1;
break;
case "B" :
dataTable.Rows[i][1] = 2;
break;
case "C" :
dataTable.Rows[i][1] = 3;
break;
// other cases
【讨论】:
【参考方案2】:这里 dt 是您的数据表。使用这样的循环:
int id = 1;
for (int i = 0; i < dt.Rows.Count; i++)
if (i == 0)
dt.Rows[i]["ID"] = id;
if (i != dt.Rows.Count && dt.Rows[i + 1]["Value"] != dt.Rows[i]["Value"])
id++;
else
if (dt.Rows[i - 1]["Value"] == dt.Rows[i]["Value"])
dt.Rows[i]["ID"] = id;
else
id = id + 1;
dt.Rows[i]["ID"] = id;
【讨论】:
【参考方案3】:如果值可能介于 A-Z 之间,请考虑在表单中完成以下操作,但可以在任何您想要的地方完成。
public class Replacement
public string Value get; set;
public int Index get; set;
表格代码
private void SetIdButton_Click(object sender, EventArgs e)
var dataTable = MockedDataTable();
var items = ReplacementData;
for (int index = 0; index < dataTable.Rows.Count; index++)
dataTable.Rows[index].SetField("ID",
items.FirstOrDefault(replacement =>
replacement.Value == dataTable.Rows[index].Field<string>("Value")).Index);
foreach (DataRow row in dataTable.Rows)
Console.WriteLine($"string.Join(",", row.ItemArray)");
private static Replacement[] ReplacementData
=> "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
.ToCharArray().Select((value, index) => new Replacement
Value = value.ToString(),
Index = index + 1
)
.ToArray();
private static DataTable MockedDataTable()
DataTable dataTable = new DataTable();
dataTable.Columns.Add("Value", typeof(string));
dataTable.Columns.Add("ID", typeof(int));
dataTable.Rows.Add("A");
dataTable.Rows.Add("A");
dataTable.Rows.Add("A");
dataTable.Rows.Add("B");
dataTable.Rows.Add("B");
dataTable.Rows.Add("C");
dataTable.Rows.Add("D");
return dataTable;
输出
A,1
A,1
A,1
B,2
B,2
C,3
D,4
【讨论】:
以上是关于C# DataTable -> 需要根据列值生成一个ID的主要内容,如果未能解决你的问题,请参考以下文章