Это Python; все идет . Подумайте, как опубликовать свою документацию . Докстоны невидимы, за исключением читателей вашего исходного кода.
Люди действительно любят просматривать и искать документацию в Интернете. Для этого используйте инструмент документации Sphinx . Это де-факто стандарт для документирования проектов Python. Продукт прекрасен - посмотрите на https://python-guide.readthedocs.org/en/latest/ . На веб-сайте «Чтение документов» будут размещены ваши документы бесплатно.
Существует несколько способов сделать это, но они - в основном вариации на тему.
Псевдокод:
For Each Item In Collection:
Add Item To String
If Not Last Item, Add Comma
А другой способ, которым мне нравится немного лучше, является чем-то вроде этого:
For Each Item In Collection:
If Not First Item, Add Comma
Add Item To String
Редактирование: причина мне нравится второй способ сделать его, состоит в том, что каждый объект стоит самостоятельно. Используя первый подход при изменении логики позже так, чтобы последующий объект не мог бы быть добавлен, Вы могли заканчивать со случайной запятой в конце строки, если Вы также не сделали свой тест в предыдущем объекте более интеллектуальным, который является немым.
или можно сделать:
Separator = ""
For Each Item In Collection
Add Separator + Item To String
Separator = ", "
установка By разделитель к пустой строке в первом повторении Вы пропускаете первую запятую. Один меньше, если оператор. Этот мог бы или не мог бы быть более читаемым в зависимости от того, что Вы привыкли к
Dim Result As String
Dim Items As New List(Of String)
Items.Add("Hello")
Items.Add("World")
Result = String.Join(",", Items.ToArray())
MessageBox.Show(Result)
, Если Вы действительно обеспокоены пустыми строками, используйте эту функцию соединения:
Function Join(ByVal delimiter As String, ByVal items As IEnumerable(Of String), Optional ByVal IgnoreEmptyEntries As Boolean = True) As String
Dim delim As String = ""
Dim result As New Text.StringBuilder("")
For Each item As String In items
If Not IgnoreEmptyEntries OrElse Not String.IsNullOrEmpty(item) Then
result.Append(delim).Append(item)
delim = delimiter
End If
Next
Return result.ToString()
End Function
Продолжение от Строки. Ответ соединения, для игнорирования пустого указателя/пустых строк (и если Вы используете.NET 3.5) Вы могли бы использовать немного Linq., например,
Dim Result As String
Dim Items As New List(Of String)
Items.Add("Hello")
Items.Add("World")
Result = String.Join(",", Items.ToArray().Where(Function(i) Not String.IsNullOrEmpty(i))
MessageBox.Show(Result)
Как это:
lstItems.ToConcatenatedString(s => s, ", ")
, Если Вы хотите проигнорировать пустые строки как в Вашем примере:
lstItems
.Where(s => s.Length > 0)
.ToConcatenatedString(s => s, ", ")
самая популярная пользовательская агрегатная функция на моей панели инструментов. Я использую его каждый день:
public static class EnumerableExtensions
{
/// <summary>
/// Creates a string from the sequence by concatenating the result
/// of the specified string selector function for each element.
/// </summary>
public static string ToConcatenatedString<T>(
this IEnumerable<T> source,
Func<T, string> stringSelector)
{
return EnumerableExtensions.ToConcatenatedString(source, stringSelector, String.Empty);
}
/// <summary>
/// Creates a string from the sequence by concatenating the result
/// of the specified string selector function for each element.
/// </summary>
/// <param name="separator">The string which separates each concatenated item.</param>
public static string ToConcatenatedString<T>(
this IEnumerable<T> source,
Func<T, string> stringSelector,
string separator)
{
var b = new StringBuilder();
bool needsSeparator = false; // don't use for first item
foreach (var item in source)
{
if (needsSeparator)
b.Append(separator);
b.Append(stringSelector(item));
needsSeparator = true;
}
return b.ToString();
}
}
Вы полагали бы, что существует класс в платформе.NET, которая обеспечивает эту функциональность?
public static string ListToCsv<T>(List<T> list)
{
CommaDelimitedStringCollection commaStr = new CommaDelimitedStringCollection();
list.ForEach(delegate(T item)
{
commaStr.Add(item.ToString());
});
return commaStr.ToString();
}
Спасибо за все ответы.
кажется, что "надлежащий" ответ зависит от контекста, в котором создается список разделенных запятой значений. У меня нет аккуратного списка объектов для использования (должен был использовать что-то для примера...), но у меня действительно есть массив, объекты которого могут или не могут быть добавлены к разделенному списку запятой в зависимости от различных условий.
, Таким образом, я выбрал что-то к эффекту
strResult = ""
strSeparator = ""
for i as integer = 0 to arrItems.Length - 1
if arrItems(i) <> "test" and arrItems(i) <> "point" then
strResult = strResult & strSeparator & arrItem(i)
strSeparator = ", "
end if
next
, Как обычно, существуют многочисленные методы выполнения этого. Я не знаю, что любой метод заслуживает большего количества похвалы или продвижения, чем другой. Некоторые более полезны в определенных контекстах, в то время как другие удовлетворяют требования различных контекстов.
Снова, благодаря всем для Вашего входа.
BTW, исходное сообщение с "первое, что пришло на ум" примером кода не фильтрует нулевые объекты длины, вместо этого это ожидает строки результата для становления больше, чем нулевая длина прежде, чем добавить запятую. Вероятно, не очень эффективный, но я have'nt протестировал его. Снова, это было первое, что пришло на ум.
Dim strResult As String = ""
Dim separator = ","
Dim lstItems As New List(Of String)
lstItems.Add("Hello")
lstItems.Add("World")
For Each strItem As String In lstItems
strResult = String.Concat(strResult, separator)
Next
strResult = strResult.TrimEnd(separator.ToCharArray())
MessageBox.Show(strResult)
идея состоит в том, чтобы использовать String.TrimEnd() function
Имеется ли в решении для использования метода StringBuilder
или Concat
?
Если нет, вы можете использовать статический метод String.Join
. Например (в C #):
string result = String.Join(",", items.ToArray());
См. мой очень похожий вопрос для более подробной информации по этому вопросу.
Если у вас нет , у вас для использования метода StringBuilder
или Concat
, вы также можете использовать:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Configuration;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
CommaDelimitedStringCollection commaStr = new CommaDelimitedStringCollection();
string[] itemList = { "Test1", "Test2", "Test3" };
commaStr.AddRange(itemList);
Console.WriteLine(commaStr.ToString()); //Outputs Test1,Test2,Test3
Console.ReadLine();
}
}
}
Это требует ссылка на System.Configuration