Re[7]: Верно ли написан тест скорости выполнения
От: Igorxz  
Дата: 06.02.20 12:33
Оценка:
Здравствуйте, Passerby, Вы писали:

P>Что значит спецэффект?


спецэффект — это такой побочный эффект, который, даже если и есть, не предусмотрен/не запланирован идеей/концепцией.
но может устойчиво возникать при определенных обстоятельствах.
типа ветер дует, потому что деревья качаются)))

P>Объясните, почему заполнение списка идет в порядке заполнения словаря?

что значит заполнение списка идет в порядке заполнения словаря? непонятно.
если речь про то, что словарь из сортированного источника заполняется как бы то же сортировано, то это спецэффект))

вот пример кода, когда "как бы сортированный" словарь после удалений и пере-добавлений пересттает быть "как бы сортированным":
using System;
using System.Collections.Generic;
using System.Linq;

namespace __XZ__
{
    /// <summary>
    /// 
    /// </summary>
    internal static class Program
    {
        [STAThread] private static void Main()
        {
            //ordered by asc
            var array = Enumerable.Range( 'a', 'z' - 'a' + 1 ).Select( i => ((char) i).ToString() ).ToArray();

            DictionaryFill_Test( array );

            Console.ForegroundColor = ConsoleColor.DarkGray;
            Console.WriteLine( "\r\n\r\n[.....finita.....]" );
            Console.ReadLine();
        }

        private static void DictionaryFill_Test( IList< string > lst )
        {
            var dict = new Dictionary< string, string >();

            dict.Fill( lst );
            Console.WriteLine( "Dictionary fill #1:" );
            dict.ToConsole();

            var rnd = new Random( 42 );
            for ( var j = 1; j <= 10; j++ )
            {
                var mod = rnd.Next( 1, 4 );

                dict.Remove( lst.Where( (_, i) => (i % mod) == 0 ) );
                dict.Fill( lst );

                Console.WriteLine( $"Dictionary random-remove & fill #{j}:" );
                dict.ToConsole();
            }
        }
        private static void Fill( this Dictionary< string, string > dict, IEnumerable< string > appendKeys )
        {
            foreach ( var key in appendKeys )
            {
                if ( !dict.ContainsKey( key ) )
                {
                    dict.Add( key, key );
                }
            }
        }
        private static void Remove< K, T >( this Dictionary< K, T > dict, IEnumerable< K > removedKeys )
        {
            foreach ( var key in removedKeys )
            {
                dict.Remove( key );
            }
        }

        private static void ToConsole< K, T >( this Dictionary< K, T > dict )
        {
            Console.WriteLine( "--------------------------------------" );
            foreach ( var p in dict )
            {
                Console.WriteLine( $"'{p.Key}', '{p.Value}'" );
            }
            Console.WriteLine( "--------------------------------------\r\n" );
        }
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.