Как сохранить интервал [], выстраивают в параметрах настройки приложения

В Ruby, преобразовывая в нижний регистр и разделяя все не алфавитное:

def isPalindrome( string )
    ( test = string.downcase.gsub( /[^a-z]/, '' ) ) == test.reverse
end

, Но это испытывает желание обманывать, правильно? Никакие указатели или что-либо! Таким образом, вот версия C также, но без нижнего регистра и совершенства разделения символа:

#include <stdio.h>
int isPalindrome( char * string )
{
    char * i = string;
    char * p = string;
    while ( *++i ); while ( i > p && *p++ == *--i );
    return i <= p && *i++ == *--p;
}
int main( int argc, char **argv )
{
    if ( argc != 2 )
    {
        fprintf( stderr, "Usage: %s <word>\n", argv[0] );
        return -1;
    }
    fprintf( stdout, "%s\n", isPalindrome( argv[1] ) ? "yes" : "no" );
    return 0;
}

ну, который был забавой - делают я получаю задание; ^)

90
задан Aaron Hall 20 July 2018 в 21:20
поделиться

4 ответа

для хранения:

строковое значение = String.Join ("," , intArray.Select (i => i.ToString ()). ToArray ());

для воссоздания:

int [] arr = value.Split (','). Select (s => Int32.Parse (s)). ToArray ();

Изменить: предложение Абеля!

40
ответ дан 24 November 2019 в 07:01
поделиться

Там - еще один способ достичь этого результата, который намного чище в использовании, но требует большего количества кода. Я реализую собственный преобразователь типов и типов, возможен следующий код:

List<int> array = Settings.Default.Testing;
array.Add(new Random().Next(10000));
Settings.Default.Testing = array;
Settings.Default.Save();

Для этого вам понадобится тип с преобразователем типов, который позволяет преобразовывать в строки и из строк. Вы делаете это, украсив тип атрибутом TypeConverterAttribute:

[TypeConverter(typeof(MyNumberArrayConverter))]
public class MyNumberArray ...

Затем реализуя этот преобразователь типов как производное от TypeConverter:

class MyNumberArrayConverter : TypeConverter
{
    public override bool CanConvertTo(ITypeDescriptorContext ctx, Type type)
    { return (type == typeof(string)); }

    public override bool CanConvertFrom(ITypeDescriptorContext ctx, Type type)
    { return (type == typeof(string)); }

    public override object ConvertTo(ITypeDescriptorContext ctx, CultureInfo ci, object value, Type type)
    {
        MyNumberArray arr = value as MyNumberArray;
        StringBuilder sb = new StringBuilder();
        foreach (int i in arr)
            sb.Append(i).Append(',');
        return sb.ToString(0, Math.Max(0, sb.Length - 1));
    }

    public override object ConvertFrom(ITypeDescriptorContext ctx, CultureInfo ci, object data)
    {
        List<int> arr = new List<int>();
        if (data != null)
        {
            foreach (string txt in data.ToString().Split(','))
                arr.Add(int.Parse(txt));
        }
        return new MyNumberArray(arr);
    }
}

Предоставляя некоторые удобные методы в классе MyNumberArray, мы можем безопасно назначать и из List, полный класс будет выглядеть примерно так:

[TypeConverter(typeof(MyNumberArrayConverter))]
public class MyNumberArray : IEnumerable<int>
{
    List<int> _values;

    public MyNumberArray() { _values = new List<int>(); }
    public MyNumberArray(IEnumerable<int> values) { _values = new List<int>(values); }

    public static implicit operator List<int>(MyNumberArray arr)
    { return new List<int>(arr._values); }
    public static implicit operator MyNumberArray(List<int> values)
    { return new MyNumberArray(values); }

    public IEnumerator<int> GetEnumerator()
    { return _values.GetEnumerator(); }
    IEnumerator IEnumerable.GetEnumerator()
    { return ((IEnumerable)_values).GetEnumerator(); }
}

Наконец, чтобы использовать это в настройках, вы добавляете указанные выше классы в сборку и компилируете. В редакторе Settings.settings вы просто нажимаете опцию «Обзор», выбираете класс MyNumberArray и начинаете.

Опять же, это намного больше кода; однако его можно применить к гораздо более сложным типам данных, чем простой массив.

11
ответ дан 24 November 2019 в 07:01
поделиться

Думаю, вы правы насчет сериализации ваших настроек. В качестве примера см. Мой ответ на этот вопрос:

Способы совместного использования конфигурации между двумя приложениями?

У вас будет свойство, которое представляет собой массив, например:

/// <summary>
/// Gets or sets the height.
/// </summary>
/// <value>The height.</value>
[XmlAttribute]
public int [] Numbers { get; set; }
0
ответ дан 24 November 2019 в 07:01
поделиться

Укажите параметр как System.Collections.ArrayList, а затем:

Settings.Default.IntArray = new ArrayList(new int[] { 1, 2 });

int[] array = (int[])Settings.Default.IntArray.ToArray(typeof(int));
3
ответ дан 24 November 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: