- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要在 .Net 中实现一个关于 System.Tuple 类的方法。最好的方法是什么?扩展方法、子类化整个 Tuple 类集或基于 System.Tuple 的源代码创建一个新类?
该方法输入一个 Tuple<T1,T2..Tn>
并返回 Tuple<T1..Tm> (m<n)
基于掩码(int 或 boolean)。如何替换 switch-case 语句和反射的使用?我怎样才能提高性能?
public static object shrink(this object source, params int[] mask)
{
PropertyInfo[] prop = source.GetType().GetRuntimeProperties().ToArray<PropertyInfo>();
object[] tmp = new object[mask.Length];
int index = 0;
for (int i = 0; i < mask.Length; i++)
{
if (mask[i] != 0)
{
tmp[index] = prop[i].GetValue(source, null);
index++;
}
}
switch (index)
{
case 1: return Tuple.Create(tmp[0]);
case 2: return Tuple.Create(tmp[0], tmp[1]);
....
....
}
}
以同样的方式我需要实现一个 Tuple
到数组和一个数组到Tuple
方法。
2) public static object toArray(this object source)
输入:Tuple<T1..Tn>
输出:object[]
3) public static object FromArray(this object source)
输入:object[]
输出 Tuple<T1..Tn)
最佳答案
这可能不会提高函数的运行时间,但会避免 switch case。
private object StripTuple(object tuple, int[] mask)
{
int[] indexes = mask.Select((v, i) => new { val = v, index = i }).Where(o => o.val == 1).Select(i => i.index).ToArray();
object[] items = new object[indexes.Length];
Type[] tupleTypes = new Type[indexes.Length];
var originalTupleType = tuple.GetType();
var genericArgs = originalTupleType.GetGenericArguments();
for (var i = 0; i < indexes.Length; i++)
{
items[i] = originalTupleType.GetProperty("Item" + (indexes[i] + 1)).GetValue(tuple);
tupleTypes[i] = genericArgs[indexes[i]];
}
Type tupleType = Type.GetType("System.Tuple`" + indexes.Length);
Type newTupleType = tupleType.MakeGenericType(tupleTypes);
return Activator.CreateInstance(newTupleType, items);
}
用法:
var t1 = new Tuple<int, int, int, string, double, string, int>(1, 2, 3, "4", 5.7, "6", 7);
var newTuple = StripTuple(t1, new int[7]{0,0,0,1,1,0,1}); // "4",5.7,7
该函数将采用前 m 个参数(m <= 元组的长度)。
如果输入是 Tuple<int,int,string,int>
并且 length = 3 那么输出类型将为 Tuple<int,int,string>
关于c# - 如何使用收缩、toArray 和 fromArray 方法改进 System.Tuple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32681711/
我正在使用 OpenCV 和 Python Tkinter。我想将 OpenCV 的视频帧获取到 Tkinter 标签。我使用了线程,因为我有两个循环。 (我从 this 得到了指示) 当我尝试运行代
我正在编写一个小 gui 来测试 opencv 函数 - 轻松更改参数值(用于阈值、blob 检测等)。我开始使用 tkinter 编写 gui,并使用 Image.fromarray 函数得到奇怪的
This question already has answers here: OpenCV giving wrong color to colored images on loading (2个答案
我无法解释这段代码的 Doctrine 问题。 public function fromArray(array $array, $deep = true) { $refresh = false
我有想要存储到图像中的数据。我创建了一个宽度为 100、高度为 28 的图像,我的矩阵具有相同的形状。当我使用 Image.fromarray(matrix) 时,形状发生变化: from PIL i
我正在尝试使用 Image.fromarray 将 numpy 矩阵保存为灰度图像。它似乎适用于随机矩阵,但不适用于特定矩阵(应该出现一个圆圈)。谁能解释我做错了什么? from PIL import
我的目标是在 IPython 笔记本中内联打印图像。该图像是使用函数 PIL.Image.fromarray 构建的。更具体地说,这是发生了什么。当我运行时 import numpy as np fr
我正在尝试学习不同的 RxJava 运算符。我对 Observable.just 和 Observable.fromArray() 以及它们如何发出 Observables 有点困惑。 单个整数工作正
我正在使用 numpy 数组转换为图像 Image.fromarray() 文档字符串显示默认模式是“None”。这意味着什么?是“L”等模式之一,还是另一种模式? 最佳答案 如果您不指定模式或指定
我正在尝试可视化一个包含 2048280 个整数的列表,这些整数要么是 1,要么是 0。有一个函数可以从 (width=1515 height=1352) 图像文件中输出这个列表。功能 test_re
我在指定的行中从以下 Python3 代码中收到错误。x、y 和 z 都是普通的 2D numpy 数组,除了大小相同外,它们的工作方式应该相同。然而它们的行为不同,y 和 z 崩溃而 x 工作正常。
我正在使用 Python 3.6 和 Pillow 4.0.0我正在尝试从值数组制作 PIL 图像,请参阅下面的简化代码,我收到以下错误:AttributeError: 'array.array' o
我真的尽了最大努力通过自己的研究来解决这个问题,但不幸的是,我是 three.js 和 javascript 的新手,我真的需要一些帮助。 我正在尝试将模型从 threex(google threex
我有一个形状为 3,256,256 的 PyTorch 张量其中 3 是 channel 数,图像尺寸为 256,均为浮点值。 我正在尝试将其输入网络并使用 PIL 进行一些转换。为此,我这样做: i
我想以 P 模式加载图像,将其转换为 np.array 然后再转换回来,但我得到了错误的 Image 对象,它是灰色的图片,不是彩色的 label = PIL.Image.open(dir).conv
我有一个形状为 (10000,1296) 的数组 (numpy),我想将其保存为 10,000 张 36x36 大小的图像。数组中的所有值都在 (0,255) 范围内。所以我使用这段代码来做到这一点(
如果有任何帮助,我将不胜感激:) 我正在尝试从一维字符串数组创建一个记录数组和二维数字数组(这样我就可以使用 np.savetxt 并将其转储到文件中)。不幸的是,文档没有提供信息:np.core.r
我正在编写一个脚本,使用 PIL 在 python3 中加密和解密图像。在这里,我将图像转换为一个 numpy 数组,然后将数组的每个元素乘以 10。现在我注意到 PIL fromarray() 中的
我正在使用 Python 2.7 和 opencv 2.1。 我有一个 numpy 数组,我想将它转换为“cv.CV_32FC1”类型的 opencv 矩阵。如何设置类型? “CreateMat()”
我需要在 .Net 中实现一个关于 System.Tuple 类的方法。最好的方法是什么?扩展方法、子类化整个 Tuple 类集或基于 System.Tuple 的源代码创建一个新类? 该方法输入一个
我是一名优秀的程序员,十分优秀!