c# - 交替从字符串中删除每个字符,将其余字符作为每个循环返回一个
问题描述
示例输入string
是"12345"
结果应该是:"2345, 1345, 1245, 1235, 1234"
. 我已经尝试过Substring
,Remove
独自一人,并与成功的一半相结合。如果可能的话,我宁愿不必手动将字符串的元素放入和操作列表/数组中,并将解决方案保留在基本的字符串操作中。这是我最近的尝试:
using System;
public class Program
{
public static void Main()
{
string message = "12345"; // length: 5
string removed; int i = 0;
removed = message.Substring(i+1); Console.WriteLine("1: " + removed);
for(i = 2; i < message.Length; i++) {
removed = message.Substring(i);
Console.WriteLine(i + ": " + removed);
}
removed = message.Substring(i);
Console.WriteLine(i + ": " + removed);
}
}
@Mureinik 感谢您的解决方案。我选择它是因为它的简单性。
Remove
我还意识到,当我第一次厌倦使用它时,我可能搞砸了我的索引迭代;这就是为什么它不断抛出异常。
我决定将我的代码留在这里作为我解释的参考,因为我选择的解决方案看起来不同。
解决方案
好吧,您可以借助以下方法来做到这一点Remove
:
private static IEnumerable<string> Removes(string value) {
if (string.IsNullOrEmpty(value))
yield break;
for (int i = 0; i < value.Length; ++i)
yield return value.Remove(i, 1);
}
或者Substring
(效率稍低):
private static IEnumerable<string> Removes(string value) {
if (string.IsNullOrEmpty(value))
yield break;
for (int i = 0; i < value.Length; ++i)
yield return value.Substring(0, i) + value.Substring(i + 1);
}
演示:
Console.Write(string.Join(", ", Removes("12345")));
结果:
2345, 1345, 1245, 1235, 1234
推荐阅读
- java - 使用没有溢出的 64 位整数解决 n 选择 k 的大数
- android - Android:在没有 ADB 的情况下启用 Firebase DebugView
- javascript - 以编程方式滚动到表中的最后一列
- angular - 手动触发 ngFor 或使其正确更新 DOM
- rabbitmq - 通过 JMS 将 OpenLiberty 连接到 RabbitMQ
- xamarin - Label.SizeToFit() 已弃用
- visual-studio - 错误 C2039 : 'sort': is not a member of 'std' 即使我已经包含了算法头
- javascript - TypeError: (intermediate value).map is not a function when using set for Country Api
- mysql - 一次删除多个表的触发器
- r - 如何制作一个变量来明确 R 中另一个变量的差异?