using System;
using System.Collections.Generic;
using CB.Common;
using CB.Entity;
using System.Linq;
namespace CB.TrendChart
{
///
/// 获取多值项值类
///
public class MultiValueFunction
{
///
/// [多值多列]开奖号码分布项
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]开奖号码分布项", ChartItemType.MultiValue_OpenCodeItem, ChartItemClassName.MultiValue)]
public static void SetOpenCodeItemValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount) where TEntity : LotteryOpenCode
{
GetMultiValue(entity, indexStart, indexEnd, minNum, maxNum, index, missNumber, lastMiss, maxMiss, times, avgMiss, RecordCount);
}
///
/// [多值多列]开奖号连号分布项
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]开奖号连号分布项", ChartItemType.MultiValue_LinkNumber, ChartItemClassName.MultiValue)]
public static void SetLinkNumberValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount) where TEntity : LotteryOpenCode
{
GetMultiValue(entity, indexStart, indexEnd, minNum, maxNum, index, missNumber, lastMiss, maxMiss, times, avgMiss, RecordCount);
}
///
/// [多值多列]开奖号重号分布项
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]开奖号重号分布项", ChartItemType.MultiValue_RepeatNumber, ChartItemClassName.MultiValue)]
public static void SetRepeatNumberValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount, ref IList LastOpentCode, ref int[] lastItemIndex) where TEntity : LotteryOpenCode
{
GetMultiValue(entity, indexStart, indexEnd, minNum, maxNum, index, missNumber, lastMiss, maxMiss, times, avgMiss, RecordCount);
}
///
/// [多值多列]开奖号折号分布项
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]开奖号折号分布项", ChartItemType.MultiValue_ZheHaoNumber, ChartItemClassName.MultiValue)]
public static void SetZheHaoHaoNumberValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount, ref IList LastOpentCode, ref int[] lastItemIndex) where TEntity : LotteryOpenCode
{
GetMultiValue(entity, indexStart, indexEnd, minNum, maxNum, index, missNumber, lastMiss, maxMiss, times, avgMiss, RecordCount);
}
///
/// [多值多列]开奖号斜连号分布项
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]开奖号斜连号分布项", ChartItemType.MultiValue_XieLianHaoNumber, ChartItemClassName.MultiValue)]
public static void SetXieLianHaoNumberValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount, ref IList LastOpentCode, ref int[] lastItemIndex) where TEntity : LotteryOpenCode
{
GetMultiValue(entity, indexStart, indexEnd, minNum, maxNum, index, missNumber, lastMiss, maxMiss, times, avgMiss, RecordCount);
}
///
/// [多值多列]开奖号斜跳号分布项
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]开奖号斜跳号分布项", ChartItemType.MultiValue_XieTiaoHaoNumber, ChartItemClassName.MultiValue)]
public static void SetTiaoHaoNumberValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount, ref IList LastOpentCode, ref int[] lastItemIndex) where TEntity : LotteryOpenCode
{
GetMultiValue(entity, indexStart, indexEnd, minNum, maxNum, index, missNumber, lastMiss, maxMiss, times, avgMiss, RecordCount);
}
///
/// [多值多列]开奖号竖三连号分布项
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]开奖号竖三连号分布项", ChartItemType.MultiValue_ShuSanLianHaoNumber, ChartItemClassName.MultiValue)]
public static void SetShuSanLianHaoNumberValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount, ref IList LastOpentCode, ref int[] lastItemIndex) where TEntity : LotteryOpenCode
{
GetMultiValue(entity, indexStart, indexEnd, minNum, maxNum, index, missNumber, lastMiss, maxMiss, times, avgMiss, RecordCount);
}
///
/// [多值多列]开奖号竖跳号分布
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]开奖号竖跳号分布", ChartItemType.MultiValue_ShuTiaoHaoNumber, ChartItemClassName.MultiValue)]
public static void SetShuTiaoHaoNumberValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount, ref IList LastOpentCode, ref int[] lastItemIndex) where TEntity : LotteryOpenCode
{
GetMultiValue(entity, indexStart, indexEnd, minNum, maxNum, index, missNumber, lastMiss, maxMiss, times, avgMiss, RecordCount);
}
///
/// [多值多列]快乐12号码分布
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]快乐12号码分布", ChartItemType.MultiValue_KL12, ChartItemClassName.MultiValue)]
public static void SetKL12NumberValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount, ref IList LastOpentCode, ref int[] lastItemIndex) where TEntity : LotteryOpenCode
{
GetMultiValue(entity, indexStart, indexEnd, minNum, maxNum, index, missNumber, lastMiss, maxMiss, times, avgMiss, RecordCount);
}
///
/// [多值多列]设置值通用方法
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
private static void GetMultiValue(TEntity entity, int indexStart, int indexEnd, int minNum, int maxNum, int[] index, int[] missNumber, int[] lastMiss, int[] maxMiss, int[] times, int[] avgMiss, int RecordCount) where TEntity : LotteryOpenCode
{
IList list = LotteryUtils.GetOpenCodeList(entity, indexStart, indexEnd);
for (int i = maxNum; i >= minNum; i--)
{
missNumber[i - minNum]++;
if (list.Contains(i))
{
index[i - minNum]++;
if (null != lastMiss)
lastMiss[i - minNum] = missNumber[i - minNum];//上期遗漏
missNumber[i - minNum] = 0;
if (null != times)
times[i - minNum]++;
}
//最大遗漏
if (null != maxMiss)
if (missNumber[i - minNum] > maxMiss[i - minNum])
{ maxMiss[i - minNum] = missNumber[i - minNum]; }
// avgMiss[i - minNum] = maxMiss[i - minNum] / (times[i - minNum] + 1);//计算平均遗漏
if (null != avgMiss && null != times)
avgMiss[i - minNum] = (RecordCount - times[i - minNum]) / (times[i - minNum] + 1);//计算平均遗漏
}
}
///
/// [多值多列]获取快3二不同
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]快3二不同", ChartItemType.MultiValue_K3ebt, ChartItemClassName.MultiValue)]
public static void SetK3ebtItemValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount, string[] ItemString) where TEntity : LotteryOpenCode
{
IList list = LotteryUtils.GetOpenCodeList(entity, indexStart, indexEnd);
int[] k3s=new int[list.Count];
for (int i = 0; i < list.Count; i++)
{
k3s[i] = list[i];
}
Array.Sort(k3s);
string[] results=new string[3];
results[0]=k3s[0].ToString()+k3s[1].ToString();
results[1]=k3s[0].ToString()+k3s[2].ToString();
results[2]=k3s[1].ToString()+k3s[2].ToString();
for (int i = maxNum; i >= minNum; i--)
{
missNumber[i - minNum]++;
if (results.Contains(ItemString[i]))
{
index[i - minNum]++;
if (null != lastMiss)
lastMiss[i - minNum] = missNumber[i - minNum];//上期遗漏
missNumber[i - minNum] = 0;
if (null != times)
times[i - minNum]++;
}
//最大遗漏
if (null != maxMiss)
if (missNumber[i - minNum] > maxMiss[i - minNum])
{ maxMiss[i - minNum] = missNumber[i - minNum]; }
// avgMiss[i - minNum] = maxMiss[i - minNum] / (times[i - minNum] + 1);//计算平均遗漏
if (null != avgMiss && null != times)
avgMiss[i - minNum] = (RecordCount - times[i - minNum]) / (times[i - minNum] + 1);//计算平均遗漏
}
}
///
/// [多值多列]获取快3三不同形态
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]快3三不同形态", ChartItemType.MultiValue_Sbtxt, ChartItemClassName.MultiValue)]
public static void SetSbtxtItemValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount, string[] ItemString) where TEntity : LotteryOpenCode
{
IList list = LotteryUtils.GetOpenCodeList(entity, indexStart, indexEnd);
int[] k3s = new int[list.Count];
for (int i = 0; i < list.Count; i++)
{
k3s[i] = list[i];
}
Array.Sort(k3s);
List results = new List();
if (k3s[0]==k3s[1]&&k3s[1]==k3s[2])
{
results.Add("三同号");
}
//modified by djp 2016-06-29: change ‘&&’ to ‘||’
if (k3s[0]!=k3s[1]||k3s[1]!=k3s[2]||k3s[0]!=k3s[2])
{
results.Add("三不同");
}
for (int i = maxNum; i >= minNum; i--)
{
missNumber[i - minNum]++;
if (results.Contains(ItemString[i]))
{
index[i - minNum]++;
if (null != lastMiss)
lastMiss[i - minNum] = missNumber[i - minNum];//上期遗漏
missNumber[i - minNum] = 0;
if (null != times)
times[i - minNum]++;
}
//最大遗漏
if (null != maxMiss)
if (missNumber[i - minNum] > maxMiss[i - minNum])
{ maxMiss[i - minNum] = missNumber[i - minNum]; }
// avgMiss[i - minNum] = maxMiss[i - minNum] / (times[i - minNum] + 1);//计算平均遗漏
if (null != avgMiss && null != times)
avgMiss[i - minNum] = (RecordCount - times[i - minNum]) / (times[i - minNum] + 1);//计算平均遗漏
}
}
///
/// [多值多列]获取快3二不同形态
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
[ChartFunction("[多值多列]快3二不同", ChartItemType.MultiValue_Ebtxt, ChartItemClassName.MultiValue)]
public static void SetEbtxtItemValue(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount, string[] ItemString) where TEntity : LotteryOpenCode
{
IList list = LotteryUtils.GetOpenCodeList(entity, indexStart, indexEnd);
int[] k3s = new int[list.Count];
for (int i = 0; i < list.Count; i++)
{
k3s[i] = list[i];
}
Array.Sort(k3s);
List results = new List();
//modified by djp 2016-06-29:change ‘||’ to ‘&&’
if (k3s[0] != k3s[1] && k3s[1] != k3s[2] && k3s[0] != k3s[2])
{
results.Add("二不同");
}
if (k3s[0] == k3s[1] || k3s[1] == k3s[2] || k3s[0] == k3s[2])
{
results.Add("二同");
}
for (int i = maxNum; i >= minNum; i--)
{
missNumber[i - minNum]++;
if (results.Contains(ItemString[i]))
{
index[i - minNum]++;
if (null != lastMiss)
lastMiss[i - minNum] = missNumber[i - minNum];//上期遗漏
missNumber[i - minNum] = 0;
if (null != times)
times[i - minNum]++;
}
//最大遗漏
if (null != maxMiss)
if (missNumber[i - minNum] > maxMiss[i - minNum])
{ maxMiss[i - minNum] = missNumber[i - minNum]; }
// avgMiss[i - minNum] = maxMiss[i - minNum] / (times[i - minNum] + 1);//计算平均遗漏
if (null != avgMiss && null != times)
avgMiss[i - minNum] = (RecordCount - times[i - minNum]) / (times[i - minNum] + 1);//计算平均遗漏
}
}
[ChartFunction("[多值多列]快乐扑克3号码分布", ChartItemType.MultiValue_KLPKHMFBValue, ChartItemClassName.MultiValue)]
public static void GetTCKLPK3_HaoMaFengBu(TEntity entity, int indexStart, int indexEnd, int count, int minNum, int maxNum,
ref int[] index, ref int[] missNumber, ref int[] lastMiss, ref int[] maxMiss, ref int[] times, ref int[] avgMiss, int RecordCount) where TEntity : CB.Entity.Frequency.KLPK3Info_ShanDong
{
GetMultiKLPK3Value(entity, indexStart, indexEnd, minNum, maxNum, index, missNumber, lastMiss, maxMiss, times, avgMiss, RecordCount);
/*
if (entity == null) throw new ArgumentNullException("entity");
var tp1 = entity.TpOpenCode1;
var tp2 = entity.TpOpenCode2;
var tp3 = entity.TpOpenCode3;
var sb = new System.Text.StringBuilder();
var sn = entity.PokerShowName();
if (sn == "豹子")
return "triple," + tp1.Item2;
sb.Append((tp1.Item2 == tp2.Item2 || tp1.Item2 == tp3.Item2) ? "twice," : "single,");
sb.Append(tp1.Item2 + "|");
if (tp1.Item2 != tp2.Item2){
sb.Append(tp2.Item2 == tp3.Item2?"twice":"single");
sb.Append("," + tp2.Item2);
}
if(tp1.Item2 != tp3.Item2 && tp2.Item2 != tp3.Item2){
sb.Append("|");
sb.Append("single," + tp3.Item2);
}
return sb.ToString();//*/
}
///
/// [多值多列]设置值快乐扑克3方法
///
/// 泛型实体
/// 实体
/// 开奖号开始
/// 开奖号结束
/// 项中列的个数
/// 项最小值
/// 项最大值
/// 项索引
/// 遗漏值
/// 上期遗漏
/// 最大遗漏
/// 遗漏次数
/// 平均遗漏
private static void GetMultiKLPK3Value(TEntity entity, int indexStart, int indexEnd, int minNum, int maxNum, int[] index, int[] missNumber, int[] lastMiss, int[] maxMiss, int[] times, int[] avgMiss, int RecordCount) where TEntity : CB.Entity.Frequency.KLPK3Info_ShanDong
{
IList list = LotteryUtils.GetOpenCodeList(entity, indexStart, indexEnd);
//var pkchars = new string[] { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
for (int i = maxNum; i >= minNum; i--)
{
missNumber[i - minNum]++;
var n = list.Count(p => (p % 100 - 1) == i);
if(n>0)
//if(list.Any(p=>(p%100-1)==i))
//if (list.Contains(i))
{
index[i - minNum] += n;
if (null != lastMiss)
lastMiss[i - minNum] = missNumber[i - minNum];//上期遗漏
missNumber[i - minNum] = 0;
if (null != times)
times[i - minNum]++;
}
//最大遗漏
if (null != maxMiss)
if (missNumber[i - minNum] > maxMiss[i - minNum])
{ maxMiss[i - minNum] = missNumber[i - minNum]; }
// avgMiss[i - minNum] = maxMiss[i - minNum] / (times[i - minNum] + 1);//计算平均遗漏
if (null != avgMiss && null != times)
avgMiss[i - minNum] = (RecordCount - times[i - minNum]) / (times[i - minNum] + 1);//计算平均遗漏
}
}
}
}