自定义N维空间数组
class Space : IEnumerable<Space> {
public object Filler {
get {
return filler ?? (filler = Top.create());
}
}
public Space Upper { get; protected set; }
public Space Top => Upper?.Top ?? this;
private Func<object> create;
private object filler;
public int[] Chain { get; set; }
public int[] Dementions { get; }
Space[] all;
static Random r { get; } = new Random();
public Space(int i, params int[] indexes) : this(() => r.Next(), i, indexes) { }
public Space(Func<object> create, int i, params int[] indexes) : this(new int[], new[] { i }.Concat(indexes).ToArray()) {
this.create = create;
}
private Space(int[] chain, params int[] indexes) {
Chain = chain;
Dementions = indexes;
var i = indexes[];
all = new Space[i];
var chains = Enumerable.Range(, i).Select(e => chain.Concat(new int[] { e }).ToArray()).ToArray();
if (indexes.Length == ) {
while (i-- > ) {
all[i] = new Space(chains[i]);
all[i].Upper = this;
}
} else {
var _indexes = indexes.Skip().ToArray();
while (i-- > ) {
all[i] = new Space(chains[i], _indexes);
all[i].Upper = this;
}
}
filler = all;
}
private Space(int[] chain) {
Chain = chain;
}
public Space this[int i, params int[] indexes] {
get {
if (all == null) {
return (Filler as Space)?[i, indexes];
}
if (indexes.Length == ) {
return all[i];
}
return all[i][indexes[], indexes.Skip().ToArray()];
}
}
public override string ToString() {
return all?.Aggregate(string.Empty, (a, s) => a + s + ',').Trim(',') ?? Filler.ToString();
}
public override bool Equals(object obj) {
if (GetType() != obj?.GetType()) {
return false;
}
return GetHashCode() == obj.GetHashCode();
}
public override int GetHashCode() {
if (Upper == null) {
return base.GetHashCode();
}
return Top.GetHashCode() - Chain.GetHashCode();
}
public IEnumerator<Space> GetEnumerator() {
return ((IEnumerable<Space>)all).GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() {
return ((IEnumerable<Space>)all).GetEnumerator();
}
}
自定义N维空间数组的更多相关文章
- 自定义泛型N维空间数组
class Space<T> : IEnumerable<Space<T>> { public T Filler { get { if (!ed) { ed = t ...
- C 二维数组,以及自定义二维数组
C 二维数组,以及自定义二维数组 我们通常情况下是这样定义一个二维数组的: int a[10][15]; 我们分别查看一下a,a[0],*a 都是一样的值吧 我们可以这么理解: a是一个数组的数组 a ...
- Android生成自定义二维码
前面说过两种二维码扫描方式,现在说如何生成自定义酷炫二维码.二维码生成需要使用Google开源库Zxing,Zxing的项目地址:https://github.com/ZBar/ZBar,我们只需要里 ...
- 分配一维动态数组or 二维动态数组的方法以及学习 new 方法or vector
先来个开胃菜 // 使用new动态分配存储空间 #include<iostream> using std::cout; int main() { // 第1种方式 int *a=new i ...
- [转载]C++二维动态数组memset()函数初始化
来源:https://blog.csdn.net/longhopefor/article/details/20994919 先说说memset函数: void *memset(void *s,int ...
- PHP二维关联数组的遍历方式
采用foreach循环对二维索引数组进行遍历,相对来讲速度更快,效率更高,foreach循环是PHP中专门用来循环数组的.实例也相对简单,多加练习,想清楚程序运行逻辑即可. <?php $arr ...
- javascript 二维(多维)数组的复制问题
最近在项目中遇到一个动画暂停的效果,需要在动画停止的时候检测当前坐标和已经运行的时间,从而调节时间轴为再次运行时加速. 但是在数组保存方面折腾了半天. var orbitArray = [], lin ...
- C语言中二维字符数组的定义和初始化
本篇日志关于二维字符数组的定义和初始化.我相信这篇文章属于菜鸟级的,高手请直接无视. 一般来说,我们可能会希望定义一个二维字符数组并且在定义的时候就用一些字符串来初始化它.比如说: ][MAX_LEN ...
- C++ 指针二维数组, C++二维指针数组笔记
C++ 二维动态数组 一. 已知第一维 #include <iostream> using namespace std; int main(int argc, char const *ar ...
随机推荐
- Android--ViewPager制作APP引导页
ViewPager使用FragmentStatePagerAdapter做Adapter,引导页使用多Fragment形式. FragmentStatePagerAdapter代码如下: public ...
- nginx json 格式输出
log_format logstash_json '{ "@timestamp": "$time_local", ' ...
- linux 查看磁盘剩余命令
df -hl命令查看各磁盘的大小,使用情况,挂载点等信息. du -bs dir_name查看具体目录的空间大小
- 网页中调用Google地图
<html> <head> <meta http-equiv="Content-Type" content="text/html; cha ...
- js接受url参数
1.正则表达式 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=( ...
- 利用jquery获取html中被选中的input的值
单个按钮 <div id="wrap"> <input type="radio" name="payMethod" val ...
- SQL中的charindex函数与reverse函数用法
----------------------首先介绍charindex函数----------------------------- ...
- 你值得拥有:25个Linux性能监控工具
一.基于命令行的性能监控工具 1.dstat - 多类型资源统计工具 该命令整合了vmstat,iostat和ifstat三种命令.同时增加了新的特性和功能可以让你能及时看到各种的资源使用情况,从而能 ...
- Using MSBuild to publish a VS 2012 SSDT .sqlproj database project
http://blog.danskingdom.com/using-msbuild-to-publish-a-vs-2012-ssdt-sqlproj-database-project-the-sam ...
- Django开发笔记之数据库的设计
后台采用Django开发,可以体会到开发的便利之处,对于一个项目来说,首先最重要的是数据库的设计,那么在Django下数据库设计主要是如下步骤: 1,需求分析,这点子不用多说,而我也深刻体会到了没有原 ...