将两个列表值合并为一个

本文关键字:一个 合并 两个 列表 | 更新日期: 2023-09-27 18:35:51

有没有办法将这些项目组合成一个列表项? 如果这是一个乞丐错误,我很抱歉

List<string> values = new List<string>();
        foreach (Feature f in allFeatures)
        {
            if (f.ColumnValues.ContainsKey(layercode)&& f.ColumnValues.ContainsKey(layercode2))
            {
                if (!values.Contains(f.ColumnValues[layercode].ToString()) && !values.Contains(f.ColumnValues[layercode2].ToString()))
                {
                    values.Add(f.ColumnValues[layercode].ToString());
                    values.Add(f.ColumnValues[layercode2].ToString());

                }
            }
        }

将两个列表值合并为一个

您可以使用元组列表、字典或创建类。 我不会深入解释这些,因为您应该能够轻松搜索和找到有关这些的其他问题。 其中一些来自内存,因此语法可能有点偏差。

元组列表

List<Tuple<string,string>> values = new List<Tuple<string,string>>();
//...
if ( !values.Any(v=>v.Item1 == f.ColumnValues[layercode].ToString()) && !values.Any(v=>v.Item2 == f.ColumnValues[layercode2].ToString()) )
{
    values.Add( Tuple.Create(f.ColumnValues[layercode].ToString(),  
                            f.ColumnValues[layercode2].ToString()) );
}

字典

Dictionary<string,string> values = new Dictionary<string,string> ();
//...
if (!values.ContainsKey(f.ColumnValues[layercode].ToString()) && !values.ContainsValue(f.ColumnValues[layercode2].ToString()))
{
    values[f.ColumnValues[layercode].ToString()] = f.ColumnValues[layercode2].ToString();
}

类实例列表

public class LayerCodePair {
    public string Code1 {get;set;}
    public string Code2 {get;set;}
} // declared outside of method
...
List<LayerCodePair> values = new List<LayerCodePair>();
//...
if (!values.Any(v=> v.Code1 == f.ColumnValues[layercode].ToString()) && !values.Any(v=>v.Code2 == f.ColumnValues[layercode2].ToString()))
{
    values.Add(new LayerCodePair{ 
        Code1 = f.ColumnValues[layercode].ToString(),
        Code2 = f.ColumnValues[layercode2].ToString()
    });
}

它应该适合您,使用 ";" 字符作为分隔符:

List<string> values = new List<string>();
foreach (Feature f in allFeatures)
{
    var columnValues = f.ColumnValues;
    var firstLayerCode = columnValues[layercode].ToString();
    var secondLayerCode = columnValues[layercode2].ToString();
    if (columnValues.ContainsKey(layercode) && columnValues.ContainsKey(layercode2))
    {
        if (!values.Contains(firstLayerCode) && !values.Contains(secondLayerCode))
        {
            var combinedValue = firstLayerCode + ";" + secondLayerCode;
            values.Add(combinedValue);
        }
    }
}