【发布时间】: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。
提前致谢!
【问题讨论】:
标签: c# linq datatable c#-datatable
| 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。
提前致谢!
【问题讨论】:
标签: c# linq datatable c#-datatable
您可以简单地使用如下循环:
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
}
}
【讨论】:
这里 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;
}
}
}
【讨论】:
如果值可能介于 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
【讨论】: