【问题标题】:IEnumerable to string with spaceIEnumerable 到带空格的字符串
【发布时间】:2018-11-07 07:52:15
【问题描述】:

我发现了一个很好的数据代码作为字符串的变位词,但是当我显示时,我得到了连续的字符串,但我想要在 3 个字符之后有空格。

static void Main(string[] args)
{
    string result = "";
    var res = "abc".Anagrams();
    foreach(var anagram in res)
    { 
        if(anagram.Count() == 3)
        {
            Console.Write(anagram.MergeToStr());
        }
    }
}

public static string MergeToStr(this IEnumerable<char> chars)
{
    return new string (chars.ToArray());
}

我的输出

abcacbbacbcacabcba

但我的预期输出应该是

abc acb bac bca cab cba

如何在输出中添加空格?

【问题讨论】:

  • 好吧,您没有任何东西可以添加空格 - 如果您只是在当前的 Console.Write 方法之后添加 Console.Write(" "); 会发生什么?以及为什么需要检查anagram 的计数?
  • @DaisyShipton 猜测this is the implementationAnagrams(),在这种情况下需要进行长度检查。
  • 因为如果我不计算,我会得到所有字符的字谜数组。例如。 a ,b,c,ab 等,我只需要 abc 的排列(例如 abc,bca 等)
  • @DaisyShipton-yes,我正在尝试用我的修改来实现同样的效果
  • 这似乎是一个名为Anagrams,IMO 的方法的糟糕实现。 “a”不是“abc”的变位词……嗯。

标签: c#


【解决方案1】:

不要在字谜之间打印任何空格。

 foreach(var anagram in res)
 { 
     if(anagram.Count() != 3) continue;

     Console.Write($"{anagram.MergeToStr()} ");
 }

如果你不想使用字符串插值,你可以简单地:

Console.Write(anagram.MergeToStr() + " ");

编辑: 订购响应:

var res = "abc".Anagrams().Where(x => x.Count() == 3).Select(x => x.MergeToStr()).OrderBy(x => x).ToList();
foreach(var word in res)
{
    Console.Write($"{word} ");
}

【讨论】:

  • 谢谢,但现在我没有按字母顺序获取字符串值。你能为此提出一些建议吗。我得到 [dog dgo odg ogd gdo god] 什么时候应该得到 [dgo dog gdo god odg ogd ]
  • 我已经编辑了回复。确保导入 Linq 命名空间。 (使用 System.Linq;)。这对你有帮助吗?
【解决方案2】:

下面的示例使用Linqstring.Join 作为所需的输出。

static void Main(string[] args)
{
    string result = "";
    var res = "abc".Anagrams();
    Console.WriteLine(string.Join("   ", res.Where(a => a.Count() == 3).Select(a => a.MergeToStr()).TrimRight());
}

这将产生abc acb bac bca cab cba的输出

【讨论】:

  • 谢谢,但它也会给出非字母表。我得到 [dog dgo odg ogd gdo god] 而我期待 [dgo dog gdo god odg ogd]。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 2012-05-10
  • 2021-04-05
  • 2010-11-25
  • 2015-07-05
  • 2013-04-20
相关资源
最近更新 更多