【问题标题】:Tuple Output with string.Concat带有 string.Concat 的元组输出
【发布时间】:2014-01-21 21:03:31
【问题描述】:

我有这本词典:

Dictionary<char, Tuple<char, char>> EngtoJap = new Dictionary<char, Tuple<char, char>>()
{
//My dictionary
}

我正在尝试通过以下方式获得输出:

string output = string.Concat(array.Select(c => EngtoJap.ContainsKey(c) ? EngtoJap[c] : c));

我知道输出末尾有问题,但我不知道我需要修复什么才能获得元组。

如果我不清楚,谢谢和抱歉。

编辑: 对不起,我会更具体。我的目标是有一个英文句子并将每个字符更改为字典中指定的日文字符。

我想要的结果是随机获取 Item1 或 Item2 来替换句子中的英文字符,然后替换日文段落第 n 个位置的每个更改的字符。

之后,我想使用 numericupdown 获取字符的第 n 个位置并将它们改回英文字符以形成句子。我已经有另一本字典了。

我希望它不会太混乱......

【问题讨论】:

  • 你能定义一下你想看到的结果吗?
  • 您是否要在日语和英语之间匹配单词或字符?

标签: c# dictionary tuples


【解决方案1】:

你想这样做吗?

string output = string.Concat(array.Select(c => EngtoJap.ContainsKey(c) ? EngtoJap[c].Item1.ToString() + EngtoJap[c].Item2.ToString() : c.ToString()));

您已经拥有带有EngtoJap[c] 的元组,因此您可以使用EngtoJap[c].Item1 获取第一个字符,使用EngtoJap[c].Item2 获取第二个字符。如果你 ToString() 一切,那么你可以连接两个字符,Select 知道你正在返回一个字符串集合,这些将由 Concat 连接。

编辑在您的编辑中,您说您正在尝试随机获取 Item1 或 Item2。这行得通吗?

System.Random random = new Random(DateTime.Now.Millisecond);
string output = string.Concat(array.Select(c => EngtoJap.ContainsKey(c) ? ( random.Next(2) == 1 ? EngtoJap[c].Item1 : EngtoJap[c].Item2 ) : c));

【讨论】:

  • 最好使用EngtoJap.TryGetValue(c, out v),而不是先搜索EngToJap.ContainsKey(c),然后立即再次搜索EngtoJap[c]
  • 感谢它的工作!现在只需使用 numericupdown 将其放入正文中。真的非常感谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 2015-07-25
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
相关资源
最近更新 更多