我想生成一个集合(集合)的所有排列,如下所示:
Collection: 1, 2, 3
Permutations: {1, 2, 3}
{1, 3, 2}
{2, 1, 3}
{2, 3, 1}
{3, 1, 2}
{3, 2, 1}
Run Code Online (Sandbox Code Playgroud)
一般而言,这不是"如何"的问题,而是关于如何最有效的问题.此外,我不想生成所有排列并返回它们,但一次只生成一个排列,并且只在必要时继续(很像迭代器 - 我也尝试过,但结果却少了有效).
我已经测试了很多算法和方法,并提出了这个代码,这是我尝试过的最有效的代码:
public static bool NextPermutation<T>(T[] elements) where T : IComparable<T>
{
// More efficient to have a variable instead of accessing a property
var count = elements.Length;
// Indicates whether this is the last lexicographic permutation
var done = true;
// Go through the array from last to first
for (var i = …Run Code Online (Sandbox Code Playgroud) 我正在使用Unity(适用于Android和iOS)开发应用程序.我正在使用SOOMLA插件允许用户通过In App Purchase购买Gems(虚拟货币).
用户和Gems以及所有其他游戏逻辑都通过Azure上的服务器.
我希望以下过程以某种方式作为单个事务发生:
但是如果互联网连接在步骤1和步骤2之间发生故障 - 用户付钱给他没有收到的宝石(不好!)
所以我目前的做法是这样的:
这样,用户可以保证购买他购买的宝石,但我不能保证得到报酬(不是很好......)
注意: 我不想在商店本身管理用户Gems.我希望我自己的服务器上的一切.所以SOOMLA的平衡对我来说毫无意义.我不在乎.
我想也许应用程序可以将购买数据存储在持久存储中,直到它设法通知服务器有关它,然后删除它.但我也认为这可能是一个糟糕的解决方案.因此这个问题.
我认为最好的解决方案可以正确处理这种情况:
然后,用户可以在其他设备上安装该应用:
到目前为止,似乎无论如何这都是不可能的,这让我对IAP的技术感到失望.希望找到能证明我错误的答案.
似乎我所需要的只是能够从我的服务器获取用户的购买历史记录,并向Google Play或Apple Store提供安全请求.但这不是框架的一部分.
那么其他人在做什么?什么是最好的方法?
我想从c#获取音频文件并发送到谷歌语音识别API以获得"语音到文本"的答案.
我的代码是这样的:
try
{
byte[] BA_AudioFile = GetFile(filename);
HttpWebRequest _HWR_SpeechToText = null;
_HWR_SpeechToText =
(HttpWebRequest)HttpWebRequest.Create(
"https://www.google.com/speech-api/v2/recognize?output=json&lang=" + DEFAULT_LANGUAGE + "&key=" + key);
_HWR_SpeechToText.Credentials = CredentialCache.DefaultCredentials;
_HWR_SpeechToText.Method = "POST";
_HWR_SpeechToText.ContentType = "audio/x-flac; rate=44100";
_HWR_SpeechToText.ContentLength = BA_AudioFile.Length;
Stream stream = _HWR_SpeechToText.GetRequestStream();
stream.Write(BA_AudioFile, 0, BA_AudioFile.Length);
stream.Close();
HttpWebResponse HWR_Response = (HttpWebResponse)_HWR_SpeechToText.GetResponse();
if (HWR_Response.StatusCode == HttpStatusCode.OK)
{
StreamReader SR_Response = new StreamReader(HWR_Response.GetResponseStream());
Console.WriteLine(SR_Response.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Run Code Online (Sandbox Code Playgroud)
这部分用于上传file.wav并获取google API的响应,我从Internet上找到了该API.
但我的代码总是捕获异常:
在调用_HWR_SpeechToText.GetResponse()之前,必须将内容长度字节写入请求流.但我已经写过ContextLength了.
所以我的问题是为什么我的程序失败了?这是因为谷歌链接或我不恰当使用的HTTPWebRequest?
这是我获得API密钥的正确位置吗?

背景:
我想Ctrl+Alt+Left全局听一个热键序列(),所以我正在使用:
[DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
Run Code Online (Sandbox Code Playgroud)
这与许多其他热键,如伟大工程Ctrl+Alt+PageUp,Ctrl+Alt+PageDown等等......但随着出现问题Ctrl+Alt+Left,具体.
问题:
在一台计算机上,它工作得很好,就像任何其他热键序列一样,但在另一台Ctrl+Alt+Arrow用于旋转屏幕的计算机上,它无法注册热键(即返回零并且没有得到回调到窗口的处理).
MSDN说:如果为热键指定的击键已经被另一个热键注册,则RegisterHotKey失败.
我希望无论如何都可以注册该热键序列,如果需要,可以覆盖它.我当然希望屏幕保持不旋转状态,至少在我的程序运行时.
更改热键序列实际上不是一个选项,因为其他计算机可能还有其他可能导致故障的热键序列.
问题:
Ctrl+Alt+Left作为屏幕旋转热键和Ctrl+S保存热键有什么区别,导致一个失败而另一个失败?(也许是因为一个是全球热键,第二个是上下文?)
是否可以完全覆盖热键?这是一个好主意吗?
最重要的是,我如何确保我的热键将被注册?
查看??它所说的定义,如果它不是null或右操作数,则返回左操作数.但为什么这不起作用?
int? i = null;
string s = i ?? "some string";
Run Code Online (Sandbox Code Playgroud)
是否要求可空类型匹配正确的操作数类型?
我正在寻找一种创建程序的方法,该程序将在屏幕上找到某种颜色时执行鼠标单击.
例如,如果屏幕上有一个红色框,我希望程序点击它中心的红色框.
我怎样才能在C#中实现这一目标?
我正在尝试转换以下字符串:
★ Bayonet | Slaughter (Minimal Wear)
Run Code Online (Sandbox Code Playgroud)
简单地说:
Bayonet | Slaughter (Minimal Wear)
Run Code Online (Sandbox Code Playgroud)
为此,我尝试使用以下内容:(名称是包含上述内容的字符串)
name = name.Replace("★ ", "");
Run Code Online (Sandbox Code Playgroud)
但是,字符串保持不变.我正在使用JSON响应检索字符串,该响应似乎表明使用以下序列创建了奇怪的文本(星号):
\u2605
Run Code Online (Sandbox Code Playgroud)
但是,字符串似乎会自动转换为帖子顶部的奇怪字符串.那么为什么name.replace函数无法替换这些字符呢?
我有一组键和值,我想从中创建一个字典:
var keys = new string[] { "Key1", "Key2" };
var values = new string[] { "Bob", "Tim" };
Run Code Online (Sandbox Code Playgroud)
必要的方法是:
var dictionary = new Dictionary<string, string>();
for(int i = 0; i < keys.Length; i++) {
dictionary.Add(keys[i], values[i]);
}
Run Code Online (Sandbox Code Playgroud)
如果没有循环,我该怎么做?可能和Linq一起?我看过Array.Join,但在这种情况下无法弄清楚如何使它适用于我.
我正在Xna中开发一个关卡编辑器,我的问题是,当你使用"this"作为参数调用方法时,参数或值是参数吗?
例如:
class A_Class
{
private B_Class bClass;
public void aMethod()
{
bClass.bMethod(this);
}
}
class B_Class
{
public void bMethod(A_Class aClass)
{
// code
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个UserControl,它可以监听它自己的MouseLeave,以便改变它的背景颜色和一些儿童的可见性.应该失去知名度的孩子,也要听自己的MouseLeave以改变他们的背景颜色.
一切正常的场景是这样的:
有问题的情况是这样的:
这种情况一直发生,因为Child位于UserControl的最边缘.请注意,不仅UserControl的MouseLeave不会触发,而且Child的MouseLeave也不会触发.
为了确定在这种情况下鼠标是否实际上已离开该区域,我必须听其他控件的MouseEnter,然后通知UserControl和Child,但我真的想避免这个解决方案,因为它很难看而不是OOPish .
此外,Child必须位于UserControl的最边缘,并且无法移动.
谁能想到这个问题的巧妙解决方案?
我遇到一些看起来很简单的问题.我正在使用条件和预测试循环虽然它似乎甚至没有执行一个,因为满足条件,但它们不是.
我有,但我似乎永远不会遇到/当我打破它.它只是跳过它
int sorter = random.Next(0, 10);
bool player1full = false;
bool player2full = false;
while (player1full && player2full == false)
{
if (chuckcards[sorter] != null)
{
while (player1full != true)
{
if (player1.Count != 5)
{
player1.Enqueue(chuckcards[sorter]);
chuckcards[sorter] = null;
}
else
{
player1full = true;
}
sorter = random.Next(0, 10);
}
while (player2full != true)
{
if (chuckcards[sorter] != null)
{
if (player2.Count != 5)
{
player2.Enqueue(chuckcards[sorter]);
chuckcards[sorter] = null;
}
else
{
player2full = true;
}
sorter …Run Code Online (Sandbox Code Playgroud) c# ×10
.net ×1
algorithm ×1
android ×1
automation ×1
hook ×1
ios ×1
linq ×1
nullable ×1
optimization ×1
performance ×1
permutation ×1
reference ×1
soomla ×1
string ×1
while-loop ×1
windows ×1
winforms ×1
xna ×1