任意两个集合List<float> list1,list2,list1,list2均含有NaN值,只许相同序列的数值互相赋值,要让合并两个集合并使两个集合合并后NaN最少。

举例说明

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<float> list1 = new List<float>();
            List<float> list2= new List<float>();
            List<float> list3 = null;
            list1.Add(9.30f);
            list1.Add(float.NaN);
            list1.Add(float.NaN);
            list1.Add(float.NaN);
            list1.Add(9.34f);
            list1.Add(9.35f);           
            list1.Add(float.NaN);         
            list1.Add(9.37f);
            list1.Add(float.NaN);
            list1.Add(9.39f);
            list2.Add(9.40f);

            list2.Add(9.30f);
            list2.Add(9.31f);
            list2.Add(float.NaN);           
            list2.Add(9.33f);
            list2.Add(9.34f);
            list2.Add(9.35f);
            list2.Add(float.NaN);
            list2.Add(9.37f);            
            list2.Add(9.38f);
            list2.Add(9.39f);       
            list3= GetData(list1, list2);
            Console.WriteLine("集合List1,共{0}条记录",list1.Count);
            for (int i=0; i < list1.Count; i++)
            {
                Console.Write("{0} ",list1[i]);
            }
            Console.WriteLine();
            Console.WriteLine("集合List2,共{0}条记录", list2.Count);
            for (int i = 0; i < list2.Count; i++)
            {
                Console.Write("{0} ", list2[i]);
            }
            Console.WriteLine();
            Console.WriteLine("集合List3,共{0}条记录", list3.Count);
            for (int i = 0; i < list3.Count; i++)
            {
                Console.Write("{0} ", list3[i]);
            }
            Console.ReadKey();         
        }

        private static List<float> GetData(List<float> list1, List<float> list2)
        {
            int count = list1.Count >= list2.Count ? list1.Count : list2.Count;
            float value = 0f;
            List<float> list3 = new List<float>();
            for (int i = 0; i < count; i++)
            {
                if (i > list1.Count-1 || float.IsNaN(list1[i]))
                {
                    value = list2[i];
                }
                else
                {
                    value = list1[i];
                }
                list3.Add(value);
            }
            return list3;
        }
    }
}

 

 项目里遇到一个算法问题

相关文章: