我正在使用python,我有一个集合列表,构造如下:
list = [set([])]*n
Run Code Online (Sandbox Code Playgroud)
...其中n是列表中我想要的集合数.我想为列表中的特定集添加值.说,第二集.我试过了
list[1].add(value)
Run Code Online (Sandbox Code Playgroud)
但是,这会将值添加到列表中的每个集合.这种行为对我来说非常不直观.通过进一步的测试,我认为我发现了问题:列表显然包含10个相同集合的实例,或者指向同一集合的10个指针,或者其他东西.通过反复调用构造列表
list.append(set([]))
Run Code Online (Sandbox Code Playgroud)
允许我使用上面的语法将元素添加到单个集合.所以我的问题是:我的第一个列表构建技术到底发生了什么?很明显,我不太了解语法.另外,是否有更好的方法来初始化n元素列表?我一直在使用这种语法,这是我的第一个问题.
简单问题:我在Scala中继承了一个FilterInputStream,它有一个read方法:
public void read(byte [] b,int offset,int len)
Run Code Online (Sandbox Code Playgroud)
正在读取的数据将被放入b中,但由于参数在Scala方法中是"vals",我认为无法正确地对其进行子类化.如何将b设置为正在读取的数据?Java*InputStream真的让我没有多少选择....
这个C#的F#等价物是什么:
public T GetNewItem()
{
return new T();
}
Run Code Online (Sandbox Code Playgroud)
另外,如何将新的T()作为ref单元格返回,以便在需要out或ref参数的.Net库中使用?
你知道如何在下面初始化变量ret吗?
type ReferenceDataResponse =
{ ResponseError : ResponseError option
SecurityDatas : SecurityData array option }
let ToReferenceDataResponse(elem:Bloomberglp.Blpapi.Element) =
let ret = { ResponseError = null ; SecurityDatas = null }
if elem.HasElement("ResponseError") then
...
end
Run Code Online (Sandbox Code Playgroud)
ps:我想我已经以某种方式声明我的记录值是可变的
更新:
正如评论中所提到的,我之前在我的代码中使用过None:
type ZeroOrMany<'a> =
| Many of 'a array
| None
Run Code Online (Sandbox Code Playgroud)
这为符号'None'创建了一个新的定义,它隐藏了我试图在这里引用的"Option.None".
我基本上需要的是一个可变整数,它可以完成下面的等价,而不必求助于使用单个元素列表.
下面是一个人为的代码示例,它代表了我实际用例的本质[1]
>>> a = [5]
>>> b = [77]
>>> def swap(num1, num2):
... temp = num1[0]
... num1[0] = num2[0]
... num2[0] = temp
>>> swap(a, b)
>>> a
[77]
>>> b
[5]
Run Code Online (Sandbox Code Playgroud)
[1]我的实际用例更接近于这一点 - >
在Tkinter中使用按钮调用函数后返回一个值
我需要从与Tkinter小部件关联的回调函数返回一个值,我想避免使用全局变量.
我个人坚持'使用带有状态的Objective-C中的点符号和带有行为的消息'原则.我不想谈论这个,但更多的是方法,mutableCopy,状态还是行为?
也许我应该对国家和行为之间的差异做更多的研究,但据我所知,在这种情况下我不确定.
之前我已经编写了HashMap来存储一些对象,这些对象期望在存储它们时使用身份.即如果Object.equals()这样说,对象被视为"相同" .
后来我用内容评估范例对这些对象的类进行编码hashCode()和编写equals()方法.我的上一次立即HashMap停止工作,因为对象正在变异并变得不平等.
如何插入一些简单的解决方法,使早期的代码工作?可能有一种方法强制HashMap使用身份,尽管有定义equals()和hashCode()方法的事实?
所以我不确定我想要的是否实际上是一个可变变量,但它与它相似.
我基本上想要这样做:
case thing of
True -> p <- func
False -> p <- otherFunc
return Record {program=p, otherFields=oF}
Run Code Online (Sandbox Code Playgroud)
我有什么方法可以做那样的事情?我已经让我的函数返回一个IO记录,所以尝试将返回放在case语句中,但是我的最后一行需要返回它,但事实并非如此.
嗨我在理解尾递归方面有些困难.我知道避免无限循环以及内存使用非常重要.我在"F#中的专家"中看到了一些关于像Fibonacci这样的简单函数的例子,但是当我的结果不仅仅是一个数字时,我认为我没有看过代码.
那么累加器会是什么?我不确定...
这是我写的一个递归函数.它使用快速排序算法计算数组中的反转次数.[它取自斯坦福大学的Coursera MOOC Algo I的练习]
如果有人能解释如何使尾部递归,我将不胜感激.[另外,我已经从命令式代码翻译了那段代码,因为我之前在R中写过,所以风格根本不起作用......]
另一个问题:语法是否正确,A是一个(可变)数组,我let A = ....到处都写过?为A <- ....更好地/一样的吗?
open System.IO
open System
let X = [|57; 97; 17; 31; 54; 98; 87; 27; 89; 81; 18; 70; 3; 34; 63; 100; 46; 30; 99;
10; 33; 65; 96; 38; 48; 80; 95; 6; 16; 19; 56; 61; 1; 47; 12; 73; 49; 41;
37; 40; 59; 67; 93; 26; 75; 44; 58; 66; 8; 55; 94; 74; 83; 7; 15; 86; …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
#include <iostream>
#include <unordered_set>
struct MyStruct
{
int x, y;
double mutable z;
MyStruct(int x, int y)
: x{ x }, y{ y }, z{ 0.0 }
{
}
};
struct MyStructHash
{
inline size_t operator()(MyStruct const &s) const
{
size_t ret = s.x;
ret *= 2654435761U;
return ret ^ s.y;
}
};
struct MyStructEqual
{
inline bool operator()(MyStruct const &s1, MyStruct const &s2) const
{
return s1.x == s2.x && s1.y == s2.y;
}
};
int …Run Code Online (Sandbox Code Playgroud)