powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / List в строку, с разделением запятыми. Как ?
20 сообщений из 20, страница 1 из 1
List в строку, с разделением запятыми. Как ?
    #38828178
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Нужно склеить все элементы List<string> в одну строку, разделив запятыми.
Есть ли для этого стандартный метод ?
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828180
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Join() есть у Array
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828190
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
string.Join(string separator, IEnumerable<string> values)
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828194
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,
У меня List. Не хочется делать лишнее преобразование к массиву.

Shocker.Pro,

Спасибо !!
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828418
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekУ меня List. Не хочется делать лишнее преобразование к массив
http://codearticles.ru/articles/912
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828675
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый быстрый способ. Нет кучи копирований в памяти, как в случае со StringBuilder.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var tmp = Enumerable.Range(0, 10000).Select(_ => Guid.NewGuid().ToString()).ToList();
            var count1 = tmp.Count;
            var count2 = tmp.Select(x => x.Length).Sum();
            var ch = new char[count2 + count1];
            int counter = 0;
            foreach (var x1 in tmp)
            {
                foreach (var x2 in x1)
                {
                    ch[counter++] = x2;
                }
                ch[counter++] = ',';
            }
            var str = new string(ch);
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828679
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВСамый быстрый способ. Нет кучи копирований в памяти, как в случае со StringBuilder.В StringBuilder можно задать начальный размер, тогда кучи копирований не будет.
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828680
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВСамый быстрый способ. Нет кучи копирований в памяти, как в случае со StringBuilder.

String.Join и String.Concat работают достаточно эффективно, не нужны эти кривые поделки со стрингбилдером, и уж тем более вот таких извратов.

Когда потребуется экстремальная эффективность, придётся делать unsafe, а все эти ваши велосипеды при любых раскладах -- на помойку.
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828681
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КВ StringBuilder можно задать начальный размер, тогда кучи копирований не будет.

Не нужен он в данном случае.
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828686
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КВ StringBuilder можно задать начальный размер, тогда кучи копирований не будет.

Не нужен он в данном случае.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
    /// <summary>
    /// Concatenates the members of a constructed <see cref="T:System.Collections.Generic.IEnumerable`1"/> collection of type <see cref="T:System.String"/>, using the specified separator between each member.
    /// </summary>
    /// 
    /// <returns>
    /// A string that consists of the members of <paramref name="values"/> delimited by the <paramref name="separator"/> string. If <paramref name="values"/> has no members, the method returns <see cref="F:System.String.Empty"/>.
    /// </returns>
    /// <param name="separator">The string to use as a separator.</param><param name="values">A collection that contains the strings to concatenate.</param><exception cref="T:System.ArgumentNullException"><paramref name="values"/> is null. </exception>
    [ComVisible(false)]
    [__DynamicallyInvokable]
    public static string Join(string separator, IEnumerable<string> values)
    {
      if (values == null)
        throw new ArgumentNullException("values");
      if (separator == null)
        separator = string.Empty;
      using (IEnumerator<string> enumerator = values.GetEnumerator())
      {
        if (!enumerator.MoveNext())
          return string.Empty;
        StringBuilder sb = StringBuilderCache.Acquire(16);
        if (enumerator.Current != null)
          sb.Append(enumerator.Current);
        while (enumerator.MoveNext())
        {
          sb.Append(separator);
          if (enumerator.Current != null)
            sb.Append(enumerator.Current);
        }
        return StringBuilderCache.GetStringAndRelease(sb);
      }
    }
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828701
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

и ведь не поленился же

BrokenGlass
You should use string.Join() because:

a) it's much more readable, maintainable and easy on the eyes.

b) it uses a StringBuilder internally already, so it's very efficient ( you can confirm yourself using Reflector).

String.Join() uses a StringBuilder for the general case of an IEnumerable<T> input. If you already have an array on the other hand it uses some voodoo magic (including FastAllocateString() and UnSafeCharBuffer) to be even faster.
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828714
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttне поленился в тему...
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828723
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей К,

и ведь не поленился же Да. :-)
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38828975
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Когда потребуется экстремальная эффективность, придётся делать unsafe, а все эти ваши велосипеды при любых раскладах -- на помойку.
Это не велосипеды, это исследования.
Насчет unsafe согласен + несколько потоков.
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38829027
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВЭто не велосипеды, это исследования.
Насчет unsafe согласен + несколько потоков.

попахивает преждевременной оптимизацией. чем бы дитя не тешилось, лишь бы не занималось делом.
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38829375
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
попахивает преждевременной оптимизацией. чем бы дитя не тешилось, лишь бы не занималось делом.
String.Join проигрывает параллельной реализации чуть меньше чем в 3 раза.

P. S. алгоритм хорошо распараллеливается, попробовал из спортивного интереса.
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38829430
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВhVosttпопахивает преждевременной оптимизацией. чем бы дитя не тешилось, лишь бы не занималось делом.
String.Join проигрывает параллельной реализации чуть меньше чем в 3 раза.

P. S. алгоритм хорошо распараллеливается, попробовал из спортивного интереса.
Да ну? Если вы пробовали, приведите код, я тоже хочу посмотреть. Имею ввиду реализацию с потоками.
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38829443
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
      static void Main(string[] args)
        {
            Stopwatch sw = new Stopwatch();
            Random r = new Random();
            var data = Enumerable.Range(0, 100000).Select(_ => new string((char)r.Next(60, 100), r.Next(100, 1000))).ToList();
            sw.Restart();
            char[] chars = new char[data.Count + data.Select(x => x.Length).Sum()];
            List<Task> tList = new List<Task>();
            int begin = 0;
            
            foreach (var d in data)
            {
                int tmp = begin;
                var d1 = d;
                tList.Add(Task.Factory.StartNew(() => M1(chars, d1, tmp)));
                begin += d.Length + 1;
            }
            Task.WaitAll(tList.ToArray());
            var str = new string(chars);
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);
            sw.Start();
            str = string.Join(",", data);
            sw.Stop();
            Console.WriteLine(sw.ElapsedMilliseconds);
            Console.ReadLine();
        }
        static void M1(char[] chars, string st, int begin)
        {
            int i;
            for (i = begin; i < begin + st.Length; i++)
            {
                chars[i] = st[i - begin];
            }
            chars[i] = ',';
        }
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38830553
ЕвгенийВString.Join проигрывает параллельной реализации чуть меньше чем в 3 раза.

P. S. алгоритм хорошо распараллеливается, попробовал из спортивного интереса.

Это смотря на какой машинке. Вот на Core2Duo E6500 (2.4GHz) разница составила немногим меньше чем в 2 раза
А вот на Core i7 2600K (3.4Ghz) разница совсем незначительная ~1.2 раза (887 против 1098).
А вот вы на какой машинке тестировали?
...
Рейтинг: 0 / 0
List в строку, с разделением запятыми. Как ?
    #38831459
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артемий Соболев,
core i5-3570K (3.4 GHz)
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / List в строку, с разделением запятыми. Как ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]