我对C#很陌生,所以我有一个任务来列出列中的单词。
所以基本上我有一个带有文本的记事本,例如:
if (row.Cells[1].Text.ToString() == trans_id && row.Cells[2].Text.ToString() == trans_number)
{
row.BackColor = ColorTranslator.FromHtml("#A1DCF2");
//call the Button1_Click method
Button1_Click(new object(), new EventArgs());
}
protected void Button1_Click(object sender, EventArgs e)
{
//do the button click stuff
}
并且可以说它们有6行。我需要按顺序设置它们,看起来像:
wordone word two... wordmillion
每个其他单词都会从显示的位置开始(第一列中最长单词的额外空格等)我试着尽可能清楚地解释,任何提示/想法怎么做?我认为padright是解决方案吗? 附:对不起,如果布局错了,我对这个社区很新。
答案 0 :(得分:2)
您可以在Console.Writeline()中使用\ t(标签); 示例
Console.WriteLine("word one\t\tword two\t\tword three");
Console.WriteLine("wordjosdjfjfisio\tanotherword\totherword");
答案 1 :(得分:2)
看起来你在这里正确!
首先,这是PadRight的文档:https://msdn.microsoft.com/en-us/library/36f2hz3a%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396。
从这个MSDN解释中,我们可以看到以下有用的例子:
string str = "forty-two";
char pad = '.';
Console.WriteLine(str.PadRight(15, pad)); // Displays "forty-two......".
Console.WriteLine(str.PadRight(2, pad)); // Displays "forty-two".
所以你的答案的伪代码算法如下:让我知道你是否需要更多的解释:
注意 - MaxLength + 1只是在你最长的单词之后显示一个空格。我希望这足以让你顺利上路。随意提出任何后续问题!
答案 2 :(得分:0)
以下是使用LINQ的示例:
var text = "word_1_1 word_1_2 word_1_3\r\nsome_word_2_1 another_word_2_2 word_2_3\n word_3_1";
var words = text.Replace("\r\n", "\n").Split('\n').Select(x => Regex.Replace(x, " +", " ").Split(' '));
var lengths = words.Select(x => x.Select(y => y.Length));
var maxColumns = lengths.Max(x => x.Count());
var widths = lengths
.Select(x => x.Concat(Enumerable.Repeat(0, maxColumns)).Take(maxColumns))
.Aggregate(Enumerable.Repeat(0, maxColumns), (m, x) => { var t = x.ToArray(); m = m.Select((y, i) => y > t[i] ? y : t[i]); return m; });
var paddedLines = words.Select(x => String.Join(" ", x.Zip(widths, (a, b) => a.PadRight(b)).ToArray()));
var paddedText = String.Join("\r\n", paddedLines.ToArray());