【问题标题】:Replace array of string with other array of string?用其他字符串数组替换字符串数组?
【发布时间】:2017-02-18 12:25:17
【问题描述】:

我需要用其他数组的元素替换我数组的匹配元素
我写了这段代码:

    string[] replace(string[] input)
    {
        for (int i = 0; i < input.Length; i++)
        {
            switch (input[i])
            {
                case "a":
                    input[i] = "11";
                    break;
                case "b":
                    input[i] = "22";
                    break;
                case "c":
                    input[i] = "33";
                    break;
                default:
                    input[i] = "??";
                    break;
            }
        }
            return input;
    }

但是你能给我更好的方法来完成这项工作吗?

【问题讨论】:

  • 你能说得清楚一点吗?你到底想问什么?你到底面临什么问题?
  • 输入是否只包含 a-z 中的字符?
  • 请记住,如果您按照自己的方式更改方法中的input 数组,那么您的原始数组也会被更改,因为数组是引用类型。

标签: c# arrays csv


【解决方案1】:

您可以定义一个从源元素映射到目标元素的字典。根据您发布的示例,可以使用 Dictionary &lt;string, string&gt; mappingsDictionary; 之类的东西。

为了定义映射,您可以在结果数组中添加由原始元素和字符串组成的适当对来替换它,例如mappingsDictionary.Add ("a", "11");

那么,使用它的一种方法是调用var resultArray = myOriginalArray.Select(i =&gt; { string s; return mappingsDictionary.TryGetValue(i, out s) ? s : i; }).ToArray ();

如果输入和输出数组的元素都是字符串,也可以使用StringDictionary

【讨论】:

  • 如果在字典中找不到键,如何返回一些默认值?
  • 如果在字典中找不到特定的键,TryGetValue(...) 方法将返回 false。在我的回答中,代码尝试获取键 i 的值并返回 i 本身的值(如果在字典中找不到)。
  • 谢谢,mappingsDictionary.TryGetValue(i, out s) ?年代:“0”; }).ToArray();
猜你喜欢
  • 2014-03-21
  • 2017-12-17
  • 2013-11-08
  • 1970-01-01
  • 2014-07-04
  • 2017-01-02
  • 2010-09-28
  • 1970-01-01
  • 2019-02-26
相关资源
最近更新 更多